"""
需要通过 UDP 协议向服务器发送你的学号，获取一个会话标识符。
UDP 服务器:117.72.115.162:8889
请求格式
{
    "type": "get_session",
    "student_id": "2025xxxx"
}

成功响应格式
{
    "success": true,
    "session_id": "uuid字符串",
    "message": "sessionid获取成功"
}

"""
import socket
import json

# 服务器地址和端口
SERVER_IP = '117.72.115.162'
SERVER_PORT = 8889

# 学生学号（请替换为实际的学号）
STUDENT_ID = '20250612'  # 这里需要替换为实际的学号

def get_session_id():
    try:
        # 创建UDP套接字
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        
        # 设置超时时间为5秒
        sock.settimeout(5)
        
        # 准备请求数据
        request_data = {
            "type": "get_session",
            "student_id": STUDENT_ID
        }
        
        # 转换为JSON字符串并编码为字节
        request_bytes = json.dumps(request_data).encode('utf-8')
        
        # 发送请求到服务器
        print(f"发送请求到服务器 {SERVER_IP}:{SERVER_PORT}...")
        sock.sendto(request_bytes, (SERVER_IP, SERVER_PORT))
        
        # 接收服务器响应
        response_bytes, server_address = sock.recvfrom(1024)  # 1024是缓冲区大小
        
        # 解码响应数据并转换为JSON对象
        response_data = json.loads(response_bytes.decode('utf-8'))
        
        # 检查响应是否成功
        if response_data.get('success'):
            session_id = response_data.get('session_id')
            message = response_data.get('message')
            print(f"成功获取会话ID: {session_id}")
            print(f"消息: {message}")
            return session_id
        else:
            print(f"获取会话ID失败: {response_data.get('message')}")
            return None
            
    except socket.timeout:
        print("服务器响应超时")
        return None
    except json.JSONDecodeError:
        print("解析服务器响应失败")
        return None
    except Exception as e:
        print(f"发生错误: {str(e)}")
        return None
    finally:
        # 关闭套接字
        sock.close()

if __name__ == "__main__":
    # 调用函数获取会话ID
    session_id = get_session_id()
    
    # 如果成功获取到会话ID，可以在这里进行后续操作
    if session_id:
        print("会话ID获取成功，可以进行后续操作")
    else:
        print("会话ID获取失败，请检查服务器连接和学号是否正确")
